package leetcode;

/*
500. 键盘行
给定一个单词列表，只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。
示例：
输入: ["Hello", "Alaska", "Dad", "Peace"]
输出: ["Alaska", "Dad"]
注意：
你可以重复使用键盘上同一字符。
你可以假设输入的字符串将只包含字母。
*/

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Stack;

public class problems_500 {
    public static void main(String[] args) {
        System.out.println(new Solution().findWords(new String[]{"Hello", "Alaska", "Dad", "Peace"}));
    }

    static class Solution {
        List<List<Character>> keyword = new ArrayList<List<Character>>(){{
            add(new ArrayList<Character>(){{add('q');add('w');add('e');add('r');add('t');add('y');add('u');add('i');add('o');add('p');}});
            add(new ArrayList<Character>(){{add('a');add('s');add('d');add('f');add('g');add('h');add('j');add('k');add('l');}});
            add(new ArrayList<Character>(){{add('z');add('x');add('c');add('v');add('b');add('n');add('m');}});}};
        public String[] findWords(String[] words) {
            List<String> ret = new ArrayList<>();
            for (int i = 0; i < words.length; i++) {
                String word = words[i].toLowerCase();
                if(null == word || word.isEmpty()) continue;

                int index = -1;
                for (int j = 0; j < keyword.size(); j++) {
                    if (keyword.get(j).indexOf(word.charAt(0)) != -1) {
                        index = j;
                        break;
                    }
                }
                //
                if(index == -1) continue;
                boolean is = true;
                for (int j = 0; j < word.length(); j++) {
                    if (keyword.get(index).indexOf(word.charAt(j)) == -1){
                        is = false;
                        break;
                    }
                }
                //
                if(is){
                    ret.add(words[i]);
                }
            }
            return ret.toArray(new String[ret.size()]);
        }
    }
}